Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

You have an error in your SQL syntax; (kirnet)
Author Message
kirnet
Заглянувший



Joined: 25 Sep 2006
Posts: 9
Карма: 0
   поощрить/наказать


PostPosted: Mon Sep 25, 2006 1:33 pm (написано за 2 минуты 19 секунд)
   Post subject: You have an error in your SQL syntax;
Reply with quote

У меня в одном из скриптов есть блок:
  <?
  $mainCat_primary = getMainCat($_REQUEST['category']);
  $mainCat_secondary = getMainCat($_REQUEST['addlcategory']);
  $getFields = mysql_query("SELECT DISTINCT boxid, boxname, active FROM fields
  WHERE (categoryid='".$mainCat_primary."' OR categoryid='".$mainCat_secondary."' OR categoryid='0')
  ORDER BY fieldorder ASC") or die(mysql_error());
  $isFields = mysql_num_rows($getFields);
  if ($isFields) {
  ?>
  <!-- Additional Custom Fields -->
  <tr>
    <td colspan=2 class="c1"><b><?=$lang[addfields]?></b></td>
  </tr>
  <tr class="c5">
    <td width="30%"><img src="themes/<?=$setts['default_theme'];?>/img/pixel.gif" width="1" height="1"></td>
    <td width="70%"><img src="themes/<?=$setts['default_theme'];?>/img/pixel.gif" width="1" height="1"></td>
  </tr>
  <?
    while ($fields=mysql_fetch_array($getFields)) { ?>
  <tr class="<? echo (($count++)%2==0)?"c3":"c2"; ?>">
    <td align="right"><strong><?=$fields['boxname'];?></strong></td>
    <td> <? echo createField($fields['boxid'],$_REQUEST['box'.$fields['boxid']]); ?> </td>
  </tr>
  <? }} ?>
при его отработке под mysql 3 и mysql 4 выдается ошибка:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'fields WHERE (categoryid='1852' OR categoryid='' OR categoryi
Где моя ошибка?
P.S. в остальных скриптах аналогичный код работает нормально.
Под mysql 5 код отрабатывает нормально. Беда в том что у моего провайдера стоит mysql 4
Back to top
View user's profile Send private message
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Mon Sep 25, 2006 1:45 pm (спустя 12 минут; написано за 2 минуты 1 секунду)
   Post subject:
Reply with quote

phpfaq.ru/debug

Если ошибка в SQL-синтаксе, то и смотрите, что у Вас в SQL-запросах.
В уже сгенерированных запросах.
Back to top
View user's profile Send private message
kirnet
Заглянувший



Joined: 25 Sep 2006
Posts: 9
Карма: 0
   поощрить/наказать


PostPosted: Mon Sep 25, 2006 3:27 pm (спустя 1 час 41 минуту; написано за 1 минуту 18 секунд)
   Post subject:
Reply with quote

Просмотрел phpfaq.ru/debug, все правильно, но мне не помогло.
Как уже писал мне не понятно почему код отрабатывает под mysql 5 и "бастует" mysql 4 и 3
Back to top
View user's profile Send private message
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Mon Sep 25, 2006 3:44 pm (спустя 16 минут; написано за 49 секунд)
   Post subject:
Reply with quote

kirnet
попробуйте обрамить имена таблиц/полей в обратные апострофы: ` . Возможна реакция на ключевое слово
Back to top
View user's profile Send private message
kirnet
Заглянувший



Joined: 25 Sep 2006
Posts: 9
Карма: 0
   поощрить/наказать


PostPosted: Mon Sep 25, 2006 3:59 pm (спустя 15 минут; написано за 26 секунд)
   Post subject:
Reply with quote

пробовал - не помогает
Back to top
View user's profile Send private message
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Mon Sep 25, 2006 4:08 pm (спустя 8 минут; написано за 21 секунду)
   Post subject:
Reply with quote

kirnet, покажите проблемный SQL-запрос.
Back to top
View user's profile Send private message
kirnet
Заглянувший



Joined: 25 Sep 2006
Posts: 9
Карма: 0
   поощрить/наказать


PostPosted: Mon Sep 25, 2006 4:20 pm (спустя 11 минут; написано за 34 секунды)
   Post subject:
Reply with quote

Вы имеете в виду - как страница с ошибкой выглядит в html?
Back to top
View user's profile Send private message
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Mon Sep 25, 2006 4:58 pm (спустя 38 минут; написано за 34 секунды)
   Post subject:
Reply with quote

Нет, я имею в виду SQL-запрос, отсылаемый базе.
Back to top
View user's profile Send private message
kirnet
Заглянувший



Joined: 25 Sep 2006
Posts: 9
Карма: 0
   поощрить/наказать


PostPosted: Mon Sep 25, 2006 5:47 pm (спустя 49 минут; написано за 43 секунды)
   Post subject:
Reply with quote

Но я же выше привел проблемный кусок скрипта. Или нужно с функциями?
Back to top
View user's profile Send private message
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Mon Sep 25, 2006 9:44 pm (спустя 3 часа 57 минут; написано за 4 минуты 19 секунд)
   Post subject:
Reply with quote

Вы разницу между «куском скрипта» и запросом к базе совсем не понимаете?
Вы ни разу запроса не видели?

Я же выше ссылку дал. Её не «смотреть» надо было, а вдумчиво изучить текст статьи.
Back to top
View user's profile Send private message
kirnet
Заглянувший



Joined: 25 Sep 2006
Posts: 9
Карма: 0
   поощрить/наказать


PostPosted: Tue Sep 26, 2006 10:15 am (спустя 12 часов 30 минут; написано за 3 минуты 7 секунд)
   Post subject:
Reply with quote

Да, действительно я не знаю как что называется. Тексты я всегда читаю вдумчиво, но кроме повторений о том что:
".. повторяю - вывести надо ЗАПРОС! а не PHP-код, который его формирует!"
объяснений что такое SQL запрос я не нашел, потому и пытаюсь разобраться.
оговорка: я только пытаюсь разобраться в PHP, отсюда и нелепые вопросы.
Back to top
View user's profile Send private message
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Tue Sep 26, 2006 10:37 am (спустя 21 минуту; написано за 4 минуты 22 секунды)
   Post subject:
Reply with quote

Небольшой пример, как пользоваться статьёй об отладке:
kirnet wrote:
  $getFields = mysql_query("SELECT DISTINCT boxid, boxname, active FROM fields
  WHERE (categoryid='".$mainCat_primary."' OR categoryid='".$mainCat_secondary."' OR categoryid='0')
  ORDER BY fieldorder ASC") or die(mysql_error());
Переписываем так:
Code (php): скопировать код в буфер обмена
$sql = "SELECT DISTINCT boxid, boxname, `active` " .
        "FROM `fields` " .
        "WHERE categoryid='$mainCat_primary' OR categoryid='$mainCat_secondary' " .
            "OR categoryid=0 " .
        "ORDER BY fieldorder ASC";
echo (www.php.net/echo) "$sql\n";
$getFields = mysql_query (www.php.net/mysql_query)($sql) or die (www.php.net/die)(mysql_error (www.php.net/mysql_error)());
если завалится - копируем выведенный запрос и пробуем выполнить его через phpmyadmin. Если не работает - по очереди выкидываем столбцы, пока не найдём проблемный.
Насчет кавычек - поскольку у Вас весь запрос - в двойных кавычках, то разбивать его конкатенацией для вставки значений переменных нет смысла. Скобки я убрал, так как они обрамляют всё выражение в WHERE - то есть пользы не несут.
Back to top
View user's profile Send private message
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Tue Sep 26, 2006 11:23 am (спустя 45 минут; написано за 7 минут 13 секунд)
   Post subject:
Reply with quote

мда

kirnet, то есть: «сказали прочесть — прочёл. Слов не знаю, поэтому смысла прочтённого не понял, но считаю, что прочёл вдумчиво.»
Почему сразу не написали, что не понимаете, что от Вас хотят?

phpfaq.ru/mysql#sql
SQL - язык, на котором мы обращаемся к базе данных.
Само «обращение к базе» и есть «запрос».
Запрос можно «ручками» в консоли написать, можно в каком нибудь приложении-клиенте базы.
А можно скрипт на PHP написать, который будет генерировать такие запросы.

Last edited by bæv on Tue Sep 26, 2006 11:29 am; edited 1 time in total
Back to top
View user's profile Send private message
kirnet
Заглянувший



Joined: 25 Sep 2006
Posts: 9
Карма: 0
   поощрить/наказать


PostPosted: Tue Sep 26, 2006 11:29 am (спустя 6 минут; написано за 15 секунд)
   Post subject:
Reply with quote

Спасибо Maus!, теперь вроде понятно.
С вашим вариантом в браузере выдается
SELECT DISTINCT boxid, boxname, active FROM `fields` WHERE categoryid='1857' OR categoryid='' OR categoryid=0 ORDER BY fieldorder ASC
Я так понимаю это и есть SQL запрос?
В phpmyadmin он проходит нормально, а в скрипте "хулиганит".
Back to top
View user's profile Send private message
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Tue Sep 26, 2006 12:28 pm (спустя 59 минут; написано за 3 минуты 40 секунд)
   Post subject:
Reply with quote

kirnet wrote:
это и есть SQL запрос?
угу.
kirnet wrote:
В phpmyadmin он проходит нормально, а в скрипте "хулиганит".
какой-то нереальный глюк. Ведь phpmyadmin - это тоже php-скрипт. А если так:
Code (php): скопировать код в буфер обмена
$sql = 'SELECT DISTINCT boxid, boxname, `active` ' .
        'FROM `fields` ' .
        "WHERE categoryid='$mainCat_primary' OR categoryid='$mainCat_secondary' " .
            'OR categoryid=0 ' .
        'ORDER BY fieldorder ASC ';
Back to top
View user's profile Send private message
kirnet
Заглянувший



Joined: 25 Sep 2006
Posts: 9
Карма: 0
   поощрить/наказать


PostPosted: Tue Sep 26, 2006 12:53 pm (спустя 24 минуты; написано за 20 секунд)
   Post subject:
Reply with quote

То же самое:
SELECT DISTINCT boxid, boxname, `active` FROM `fields` WHERE categoryid='1857' OR categoryid='' OR categoryid=0 ORDER BY fieldorder ASC
Back to top
View user's profile Send private message
kirnet
Заглянувший



Joined: 25 Sep 2006
Posts: 9
Карма: 0
   поощрить/наказать


PostPosted: Tue Sep 26, 2006 1:04 pm (спустя 11 минут; написано за 1 минуту 2 секунды)
   Post subject:
Reply with quote

Вот привычка, сначала вякнуть а потом разбираться(это я про себя).
В общем спасибо огромное, дальше буду пытаться сам.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML